import '../data/user_data.dart';
import '../models/student_model.dart';
import 'student_service.dart';
import 'package:flutter/foundation.dart';

class AuthService {
  // 初始化服务
  static Future<void> init() async {
    // 确保StudentService已初始化
    await StudentService.init();
  }

  // 检查当前用户是否为管理员
  Future<bool> isUserAdmin() async {
    // 使用UserData.isAdminUser来判断
    return UserData.isAdminUser;
  }
  
  // 用户登录
  static Future<bool> login(String username, String password) async {
    // 尝试通过预设的账号登录
    final loginSuccess = UserData.login(username, password);
    
    if (loginSuccess) {
      debugPrint('使用预设账号登录成功');
      return true;
    }
    
    // 检查是否是学生登录
    final isStudent = StudentService.validateLogin(username, password);
    if (isStudent) {
      debugPrint('=== 学生登录成功 ===');
      debugPrint('登录用户名: $username');
      debugPrint('登录密码: $password');

      // 为学生创建用户记录
      final Student student = StudentService.getStudents().firstWhere(
        (s) => s.name == username && s.idCardNumber == password,
        orElse: () => throw Exception('找不到匹配的学生记录'),
      );

      debugPrint('找到学生记录:');
      debugPrint('  - ID: ${student.id}');
      debugPrint('  - 姓名: ${student.name}');
      debugPrint('  - 身份证: ${student.idCardNumber}');
      debugPrint('  - 分配的考试: ${student.assignedExamId}');

      // 为学生分配随机考试（如果还没有分配的话）
      if (student.assignedExamId == null || student.assignedExamId!.isEmpty) {
        await StudentService.assignRandomExamToStudent(student.name, student.id);
        debugPrint('为学生 ${student.name} 分配了随机考试');

        // 重新获取更新后的学生对象
        final updatedStudent = StudentService.getStudents().firstWhere(
          (s) => s.name == username && s.idCardNumber == password,
          orElse: () => student, // 如果找不到就用原来的
        );
        UserData.currentUser = updatedStudent;
        debugPrint('设置当前用户为更新后的学生: ${updatedStudent.id}');
      } else {
        debugPrint('学生 ${student.name} 已有分配的考试: ${student.assignedExamId}');
        // 设置当前用户 - 使用原有的student对象
        UserData.currentUser = student;
        debugPrint('设置当前用户为原学生: ${student.id}');
      }
      
      return true;
    }
    
    return false;
  }
} 